package SIC.Modele.DataBDD;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

/**
 * Classe qui représente une composition, elle gère la persistance des données
 */
@Entity(name="Composition")
public class CompositionORM {
	
	/**
	 * L'identifiant unique du produit
	 */
	@Id
	protected String produitID;
	
	/**
	 * La liste des composant du produit
	 */
	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	protected List<ProduitORM> listeProduits;
	
	//--------------------------------------------
	//				CONSTRUCTEUR
	//--------------------------------------------
	
	public CompositionORM()
	{
		listeProduits = new ArrayList<ProduitORM>();
	}
	
	public CompositionORM(String produitID)
	{
		this.produitID = produitID;
		listeProduits = new ArrayList<ProduitORM>();
	}
	
	public CompositionORM(String produitID, List<ProduitORM> produits)
	{
		this.produitID = produitID;
		this.listeProduits = produits;
	}
	
	//--------------------------------------------
	//				POUR L'AFFICHAGE
	//--------------------------------------------
	
	@Override
	public String toString(){
		
		String res = produitID + " ==>> ";
		
		for(ProduitORM p : listeProduits) res += "(" + p.toString() + ") + ";
		
		res = res.substring(0, res.length()-2);
		
		return  res;
	}
	
	//--------------------------------------------
	//			   ADD/GETTER/SETTER
	//--------------------------------------------
	
	public void addComposant(ProduitORM produit){
		listeProduits.add(produit);
	}
	
	public String getProduitID() {
		return produitID;
	}
	
	public void setProduitID(String produitID) {
		this.produitID = produitID;
	}

	public List<ProduitORM> getProduits() {
		return listeProduits;
	}

	public void setProduits(List<ProduitORM> produits) {
		this.listeProduits = produits;
	}
	

	@Override
	public boolean equals(Object obj) {
		
		if (this == obj) return true;
		
		if (obj == null) return false;
		
		if (getClass() != obj.getClass()) return false;
		
		ProduitORM other = (ProduitORM) obj;
		
		if (other.getProduitID().equals(produitID)) return false;
		
		return true;
	}
	
	@Override
	public int hashCode() {
		return produitID.hashCode();
	}
	
}
